package com.woniuxy.portal.config;

import com.woniuxy.portal.interceptor.JwtInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@Slf4j
//开启配置项自动读取填充到对象属性中，且填充后的对象自动加入IoC容器
@EnableConfigurationProperties(UrlProperties.class)
public class BookMvcConfig implements WebMvcConfigurer {

    /**
     *   1、spring.factory 文件   加载 RedisAutoConfiguration
     *   2、RedisAutoConfiguration 这里 加载了    redisTemplate 这个对象 添加到 IOC容器中
     *   3、  redisTemplate 需要 config ===> yaml ===> @EnableConfigurationProperties(RedisProperties.class)
     *   4、  RedisProperties 中添加了 RedisProperties ===》 读取 prefix = "spring.redis")
     *   5、 配置
     *        spring.redis.host=192.168.190.160
     *        spring.redis.port=6379
     */
    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 允许所有类型的请求来自 http://localhost:9000 服务器
     * 并且允许的请求类型包括GET、POST、PUT、DELETE、OPTIONS
     * 允许与凭据一起发送请求，不然不能使用Cookie，导致会话不能使用
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  //允许所有访问地址
                .allowedOrigins("http://localhost:9000") //允许哪些服务器地址
                .allowedMethods("*")   //允许的请求类型
                .allowedHeaders("*")   //允许所有的请求头
                .allowCredentials(true)  //允许与凭据一起发送请求，Cookie可以跨域
                .exposedHeaders("*");   //允许返回的头信息
    }

    //图片的访问地址
    @Value("${portal.image-path}")
    private String imagePath;

    /**
     * 配置资源的访问地址
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("图片地址: {}", imagePath);
        //添加 资源  图片访问路径
        registry.addResourceHandler("/images/**")
                .addResourceLocations(imagePath);
    }

//    @Autowired
//    private JwtInterceptor jwtInterceptor;
//
//    @Autowired
//    private UrlProperties urlProperties;

//    //添加拦截器
//    @Override
//    public void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(jwtInterceptor)  //拦截器
//                .addPathPatterns("/**")          //要拦截 哪些url
//                .excludePathPatterns(urlProperties.getWhiteNames());     //哪些直接方向 (白名单)
//
//    }
}